import learning as l
from Words import Words
from scipy import sparse

MIN_FILES = 150

print ' '

print '::: CLEANING :::'

print ' '

catItems = l.categories.bag.items()
print 'Actuellement, nous avons',len(catItems),'categories'
print 'Ne gardons que ceux ayant plus de',MIN_FILES,'fichiers' 
catItems.sort(key=lambda x: x[1][1], reverse=True)
catItemsClean = filter(lambda x: x[1][1] > MIN_FILES,catItems)
catItemsCleanKeys = map(lambda x: x[0],catItemsClean)
print 'Nous retrouvons donc au final seulement',len(catItemsClean),'categories'

print ' '

filItems = l.files.bag.items()
print 'Actuellement, nous avons lu',len(filItems),'fichiers'
print 'Ne gardons que ceux des categories gardees'
filItemsClean = filter(lambda x: catItemsCleanKeys.count(x[1][2]),filItems)
count = 0
for f in filItemsClean:
    f[1][0] = count
    count = count + 1
print 'Nous retrouvons donc au final seulement',len(filItemsClean),'fichiers'

print ' '

print 'Actuellement, nous nous sommes interesses a',len(l.allwords.bag),'mots'
print 'Ne gardons que ceux interessants dans les fichiers conserves'
cleanWords = Words()
for x in filItemsClean:
    cleanWords.addWords(x[1][1])
cleanWords.prune(l.MIN_FREQ_WORD,l.MAX_FREQ_WORD)
print 'Nous retrouvons donc au final seulement',len(cleanWords.bag),'mots'

print ' '

print 'Actuellement, nous avons une matrice',l.matrix.shape[0],'x',l.matrix.shape[1]
print 'Batissons une nouvelle matrice'
matrixClean = sparse.lil_matrix((len(filItemsClean), len(cleanWords.bag) + 2), dtype='int32')
for f in filItemsClean:
    matrixClean[f[1][0],0] = f[1][0]
    matrixClean[f[1][0],1] = l.categories.bag[f[1][2]][0]
    l.wordsToMatrix(cleanWords, f[1][1], f[1][0], matrixClean)
print 'Nous retrouvons donc une matrice',matrixClean.shape[0],'x',matrixClean.shape[1]
